 


using System;
using System.Collections.Generic;
using System.Linq;
using System.ServiceModel;
using Core;
using IglooCoder.Commons.WcfNhibernate;
using Infrastucture;
using WcfService1.DTO;

namespace WcfService1
{
    // NOTE: You can use the "Rename" command on the "Refactor" JurnalPembelian to change the class name "JurnalPembelianServices" in code, svc and config file together.
    [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]
    [NHibernateContext]
    public class JurnalPembelianServices : IJurnalPembelianServices
    {
        private JurnalPembelianRepository JurnalPembelianRepository;

        public JurnalPembelianServices()
        {
            JurnalPembelianRepository = new JurnalPembelianRepository(new WcfSessionStorage());
        }

        
        public List<JurnalPembelianDTO> GetList(int page, out long recordCount, string sortProperty = null, string sortType = "ASC")
        {
            var JurnalPembelians = new List<JurnalPembelian>();
            var Results = new List<JurnalPembelianDTO>();

            if (string.IsNullOrEmpty(sortProperty))
            {
                JurnalPembelians = JurnalPembelianRepository.GetDataPaged(page, 30).ToList();
            }
            else
            {
                JurnalPembelians = JurnalPembelianRepository.GetDataPaged(page, 30, sortProperty, sortType).ToList();
            }

            recordCount = JurnalPembelianRepository.RecordCount;

            JurnalPembelians.ForEach(x =>
            {

                JurnalPembelianDTO JurnalPembelianDto = new JurnalPembelianDTO();
                AutoMapper.Mapper.Map(x, JurnalPembelianDto);
                //AutoMapper.Mapper.Map(x.ParentJurnalPembelian, JurnalPembelianDto.ParentJurnalPembelian);
                Results.Add(JurnalPembelianDto);
            }
                );

            return Results;
        }

        public bool Save(JurnalPembelianDTO JurnalPembelianDTO)
        {
            bool res;
            try
            {
                var JurnalPembelian = JurnalPembelianRepository.GetDataOne(x => x.NoVoucher == JurnalPembelianDTO.NoVoucher);
              
                if (JurnalPembelian == null)
                {
                    JurnalPembelian = new JurnalPembelian();                    
                }
                AutoMapper.Mapper.Map(JurnalPembelianDTO, JurnalPembelian);
                JurnalPembelianRepository.SaveOrUpdate(JurnalPembelian);
                res = true;
            }
            catch (Exception)
            {

                res = false;
            }

            return res;
        }


        public bool Delete(JurnalPembelianDTO JurnalPembelianDto)
        {
            bool res;
            try
            {
                var JurnalPembelian = new JurnalPembelian();
                AutoMapper.Mapper.Map(JurnalPembelianDto, JurnalPembelian);
                JurnalPembelianRepository.Delete(JurnalPembelian);
                res = true;
            }
            catch (Exception)
            {
                res = false;
            }

            return res;
        }


        public List<JurnalPembelianDTO> GetListByCriteria(Dictionary<String, Object> criteria, string expression, int page, out long recordCount)
        {
            List<JurnalPembelian> JurnalPembelians = new List<JurnalPembelian>();
            var Results = new List<JurnalPembelianDTO>();
            JurnalPembelians = JurnalPembelianRepository.GetDataPaged(criteria, expression, page, 30).ToList();
            recordCount = JurnalPembelianRepository.RecordCount;
            JurnalPembelians.ForEach(x =>
            {

                JurnalPembelianDTO JurnalPembelianDto = new JurnalPembelianDTO();
                AutoMapper.Mapper.Map(x, JurnalPembelianDto);
                Results.Add(JurnalPembelianDto);
            }
            );

            return Results;
        }


        public List<JurnalPembelianDTO> GetAllJurnalPembelian()
        {
            var JurnalPembelians = JurnalPembelianRepository.FetchAll().ToList();
            var Results = new List<JurnalPembelianDTO>();
            JurnalPembelians.ForEach(x =>
            {

                JurnalPembelianDTO JurnalPembelianDto = new JurnalPembelianDTO();
                AutoMapper.Mapper.Map(x, JurnalPembelianDto);
                Results.Add(JurnalPembelianDto);
            }
            );

            return Results;
        }


        public JurnalPembelianDTO GetJurnalPembelian(String NoVoucher)
        {
            var JurnalPembelian = JurnalPembelianRepository.GetDataOne(x => x.NoVoucher == NoVoucher);
            JurnalPembelianDTO JurnalPembelianDto = new JurnalPembelianDTO();
            AutoMapper.Mapper.Map(JurnalPembelian, JurnalPembelianDto);
            return JurnalPembelianDto;
        }

        public List<JurnalPembelianDTO> GetJurnalPembelianList(string kodeJurnalPembelian)
        {
            var JurnalPembelians = JurnalPembelianRepository.GetDataList(x => x.NoVoucher.Contains(kodeJurnalPembelian)).ToList();
            var Results = new List<JurnalPembelianDTO>();
            JurnalPembelians.ForEach(x =>
            {

                JurnalPembelianDTO JurnalPembelianDto = new JurnalPembelianDTO();
                AutoMapper.Mapper.Map(x, JurnalPembelianDto);
                Results.Add(JurnalPembelianDto);
            }
            );

            return Results;
        }


	
    }

}


